package system;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import models.Pesanan;
import models.User;

/**
 *
 * @author XNPSDN
 */
public class SchedulerTask {

    /**
     * Menjadwalkan notifikasi untuk pegawai
     */
    public static void scheduleNotification() {
        int initialDelay = 10000;    // mulai task setelah 10 detik
        int period = 3600000;        // menjalankan task setiap 1 jam
        //period = 60000; // buat demo

        Timer timer = new Timer();
        TimerTask task = new TimerTask() {

            @Override
            public void run() {
                // Task yang ingin dikerjakan
                System.out.println("Expire Monitoring Start..");
                Date pesananDate;
                Date currentDate = Calendar.getInstance().getTime();
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                ArrayList<Pesanan> pesanans = Pesanan.getInstance().getAllPesananMenunggu();

                if (pesanans != null) {
                    for (Pesanan pesanan : pesanans) {
                        try {
                            pesananDate = dateFormat.parse(pesanan.tanggal);
                            System.out.println("current time " + currentDate.getTime() + " " + dateFormat.format(currentDate));
                            System.out.println("pesanan time " + pesananDate.getTime() + " " + dateFormat.format(pesananDate));
                            if (currentDate.getTime() - pesananDate.getTime() > Pesanan.EXPIRED_TIME) {
                                // disini pesanan berarti expired
                                System.out.println("Pesanan no " + pesanan.id + " expired!");
                                SchedulerTask.sendExpiredNotification(pesanan);
                            }
                        } catch (Exception e) {
                        }
                    }
                }
                System.out.println("Expire Monitoring End..");
            }
        };

        timer.scheduleAtFixedRate(task, initialDelay, period);
    }

    /**
     * Mengirim pesan notifikasi ke seluruh pegawai bahwa ada pesanan yang expired
     * @param pesanan Pesanan yang expired
     */
    public static void sendExpiredNotification(Pesanan pesanan) {
        StringBuilder subject = new StringBuilder();
        StringBuilder message = new StringBuilder();

        subject.append("Pesanan Expired ID ").append(pesanan.id);

        message.append("Kepada Seluruh Pegawai,\n\n");
        message.append("Terdapat pesanan yang expired dengan ID ").append(pesanan.id).append(".\n");
        message.append("Detail pesanan dapat dilihat melalui sistem. Diharapkan segera cek, jangan gabut!");

        MailServer.sendEmail(User.getInstance().getAllEmailPegawai(), subject.toString(), message.toString());
    }
}
